import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
import router from '@/router'
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url基地址·
  timeout: 15000 // request timeout
})// 和创建一个axios实例
// 请求拦截器 两个回调函数 一个成功 一个失败
service.interceptors.request.use((config) => {
  // 注入token
// store.getters.token =>请求头里面的token
  if (store.getters.token) {
    config.headers.Authorization = `Bearer ${store.getters.token}`
  }
  return config
}, (error) => {
  return Promise.reject(error)
})
// 响应拦截器 两个回调函数 一个成功 一个失败
service.interceptors.response.use((response) => {
  // 判断是不是blob类型的数据
  if (response.data instanceof Blob) {
    return response.data
  }
  const { data, message, success } = response.data// 默认json格式
  if (success) {
    // Message({
    //   message: message || 'Success',
    //   type: 'success',
    //   duration: 5 * 1000
    // })
    return data
  } else {
    Message({
      message: message || 'Error',
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(new Error(message || 'Error'))
  }
}, async(error) => {
  // 测试进入
  // debugger
  if (error.response.status === 401) {
    // 提示信息
    Message({
      message: '身份过期，请重新登录！',
      type: 'warning',
      // 5秒后自动关闭
      duration: 5 * 1000
    })
    // token过期
    await store.dispatch('user/logout')// 退出登录
    // 跳转到登录页
    router.push('/login')
    return Promise.reject(error)
  }
  Message({
    message: error.message,
    type: 'error',
    // 5秒后自动关闭
    duration: 5 * 1000
  })
  return Promise.reject(error)
})

export default service
